--- title: "04-内网穿透 ngork" created: 2025-12-10 tags: - 项目筑基 --- # 内网穿透 ngork ## 什么是内网穿透? ### 通俗解释 想象你的电脑是一个“酒店房间”**(内网 IP,如** `127.0.0.1` **或** `192.168.x.x`**),而互联网是**“街道”。 - 别人在街道上(公网)是找不到你的房间号的,因为很多酒店都有“201房”。 - **内网穿透** 就像是雇了一个“接线员”(ngrok 服务器)。 - 接线员在街道上设了一个“服务台”**(公网 URL),别人只要访问这个服务台,接线员就会把信号通过一条**“专用电话线”(隧道)直接转接到你的房间里。 ### 核心作用 让外网(互联网)用户能够访问你本地电脑上运行的服务(如网站、数据库、SSH 等),而无需购买服务器或配置复杂的路由器端口转发。 ## ngrok 快速上手 ngrok 是目前最流行的反向代理工具,它能通过**一条命令**瞬间建立隧道。 ### 第一步:安装与配置 下载:去 [ngrok官网](https://ngrok.com/download/windows?tab=download) 下载对应的版本(Windows/Mac/Linux)。 ![[2-Learning/03-项目筑基/05-网络与项目/02-局域网与内网穿透/assets/image-65748feb.png]] 解压:解压后得到一个可执行文件 ngrok (Windows下是 ngrok.exe)。 ![[2-Learning/03-项目筑基/05-网络与项目/02-局域网与内网穿透/assets/image-547695d2.png]] 认证(必须): 注册并登录 ngrok dashboard。 复制你的 Authtoken ![[2-Learning/03-项目筑基/05-网络与项目/02-局域网与内网穿透/assets/image-07148ca4.png]] 在终端(cmd/PowerShell)运行: ``` ngrok config add-authtoken <你的Token> ``` ### 第二步:常用命令速查 #### 暴露 Web 服务 (HTTP) 这是最常用的功能,将本地网站通过公网访问。 - **默认 80 端口:** ``` ngrok http 80 ``` - **指定其他端口 (例如 3000):** ``` ngrok http 3000 ``` ![[2-Learning/03-项目筑基/05-网络与项目/02-局域网与内网穿透/assets/image-45ace144.png]] - **指定地区 (加速连接):** 如果你在亚洲,建议加上 `--region=ap` (Asia Pacific): ``` ngrok http 80 --region=ap ``` #### 暴露 TCP 服务 (SSH/远程桌面) 如果你需要远程连接数据库、SSH 或 Windows 远程桌面 (RDP)。 - **暴露 SSH (默认 22):** ``` ngrok tcp 22 ``` - **暴露 远程桌面 (默认 3389):** ``` ngrok tcp 3389 ``` *注意:TCP 隧道在免费版中会随机分配一个端口号,例如* `0.tcp.ap.ngrok.io:12345`*。* ## 进阶技巧与常见坑 ### 重点 1:路径问题 (Route vs Path) ngrok 只负责**打通端口**,不负责**跳转路径**。 - **错误理解**:我想直接穿透到 `/share/index`,所以输入 `ngrok http 8080/share/index` ❌ (命令会报错)。 - **正确做法**: 1. 运行 `ngrok http 8080`。 2. 得到公网地址 `https://abcd.ngrok-free.app`。 3. 手动在浏览器访问 `https://abcd.ngrok-free.app/share/index`。 ### 重点 2:Host Header (网页报错 Invalid Host) 有些本地服务(如 Vue/React 开发服、WordPress)会检查请求的 Host 头,发现是 ngrok 的域名就会拒绝连接。 - **解决方案**:使用重写 Host 参数。 ``` ngrok http 8080 --host-header="rewrite" ``` *这会让你的本地程序以为请求是直接来自 localhost,从而允许访问。* ### 重点 3:流量监控 (Web Interface) ngrok 启动后,不要关闭终端。你可以在浏览器打开以下地址进入**管理面板**: - **Inspect**:查看所有经过隧道的请求(Request)和响应(Response)的详细内容,非常适合调试 API 回调(Webhook)。 - **Status**:查看当前隧道的连接状态。 ### 免费版要知道的几件事 - **公网地址每次启动都会变**:上次是 `abcd.ngrok-free.app` 这次可能就是 `efgh...` 想固定域名要付费或绑定自己的域名——临时演示无所谓 长期挂着就得另想办法 - **陌生人打开链接会先撞到警告页**:免费版有个拦截页 浏览器第一次访问要手动点一下 "Visit Site" 才放行 所以分享给别人调试时提醒对方点一下(核对点:这是免费版行为 付费版没有) - **免费隧道有连接数/带宽限制**:自己调试够用 拿来跑正经服务就不行了 具体额度官网 pricing 时常调整 以官网为准 ### 它和 Cloudflare Tunnel 什么关系 思路一模一样 都是"雇接线员" 区别在雇的是谁: - **ngrok**:现成的服务 一条命令就通 适合临时演示和调试 但免费版地址会变 速度也一般 - **Cloudflare Tunnel**:接线员换成 Cloudflare 隧道挂在自己的域名上 客户端叫 cloudflared "再次出发"主线里已经实操过(快速建站那套就是它)详见[[03-Cloudflare Tunnel|Cloudflare Tunnel]] - **FRP**:连接线员都自己当——在自己的VPS上跑一个frps当服务台 本地跑frpc连上去 完全自主可控 就是要有台有公网IP的服务器(见[[01-再次出发|再次出发]]的VPS线) 一句话:偶尔用用选ngrok 长期服务选Tunnel 有VPS想全权掌控选FRP ## 环境变量配置 (Windows) 为了避免每次都要 cd 到下载目录才能运行 ngrok: 1. 将 `ngrok.exe` 移动到一个固定目录(例如 `C:\Program Files\ngrok\`)。 2. 搜索 Windows 设置 -> **“编辑系统环境变量”**。 3. 点击 **“环境变量”** -> 在 **“系统变量”** 中找到 **Path** -> 点击 **“编辑”**。 4. 点击 **“新建”** -> 粘贴你存放 ngrok 的文件夹路径。 5. 重启终端,现在你在任何地方输入 `ngrok` 都可以运行了。 --- ⬅️ [[03-MC指令|MC指令]] 🏠 [[00-网络与项目|00-网络与项目]] ➡️ [[05-FRP 自建内网穿透|FRP 自建内网穿透]]